n участников
олимпиады получили уникальные номера от 1 до n. В результате решения задач на олимпиаде каждый участник получил
некоторое количество баллов (целое число от 0 до 600). Известно, кто сколько
баллов набрал.
Перечислите участников олимпиады
в порядке невозрастания набранных ими баллов.
Вход. В
первой строке содержится число n (0 ≤
n ≤ 101). Далее записаны n чисел – количество набранных
участниками баллов (первое число – это баллы, набранные участником
номер 1, второе – участником номер 2 и так далее).
Выход. Вывести
n чисел – номера участников в порядке
невозрастания набранных ими баллов (участники, набравшие одинаковое количество
балов должны выводиться в порядке неубывания их номеров).
Пример
входа |
Пример
выхода |
5 100 312 0 312 500 |
5 2 4 1 3 |
сортировка
Анализ алгоритма
С каждым участником олимпиады
свяжем структуру member, которая содержит его
номер и количество набранных балов. Образуем массив структур. Отсортируем их в
порядке убывания балов. Участники, набравшие одинаковое количество балов,
сортируются в порядке возрастания их номеров.
Пример
Реализация алгоритма
Объявим
структуру участника соревнования member.
struct member
{
int id,
score;
};
Объявим массив участников.
vector<member>
v;
Функция cmp является компаратором,
сортирующих участников соревнования согласно заданному условию:
·
Если количество балов одинаковое, то сортируем участников в порядке возрастания номеров;
·
Иначе сортируем в порядке убывания балов.
int cmp(member a, member b)
{
if (a.score
== b.score) return a.id
< b.id;
return a.score
> b.score;
}
Основная часть программы. Читаем входные данные. Участников
нумеруем с 1.
scanf("%d", &n);
v.resize(n);
for (i = 0; i < n; i++)
{
scanf("%d",
&v[i].score);
v[i].id =
i + 1;
}
Сортируем участников соревнования.
sort(v.begin(), v.end(), cmp);
Выводим номера участников в требуемом порядке.
for (i = 0; i < n; i++)
printf("%d
", v[i].id);
printf("\n");